package toepen;

import java.util.ArrayList;
import java.util.List;

// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.32F5BE0E-328F-01F8-4826-090A8B3EB6B2]
// </editor-fold>
/**
 * Een lijst van tot vier kaarten die tesamen een hand vormen
 * @author LucasD
 */
public class Hand {

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.1A9877EA-3D2C-296A-8798-6F415F000DC0]
    // </editor-fold>
    /**
     * 0-4 kaarten die de hand vormen
     */
    private List<Kaart> kaarten;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.1EE85D41-9544-24B0-BFF0-86B058AB3BEA]
    // </editor-fold>
    /**
     * Is door de speler neergelegd als kandidaat vuile was
     */
    private boolean isKandidaatVuileWas;

    /**
     * Of de vuile was vervolgens al bekeken is (kan geen twee keer gebeuren)
     */
    private boolean isBekekenVuileWas;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.CB3285FB-5FC3-5836-F9C6-4D725A6F9291]
    // </editor-fold>
    /**
     * 0-4 kaarten die gespeeld zijn door de speler
     */
    private List<Kaart> gespeeldeKaarten=new ArrayList<Kaart>();
    
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.CB3285FB-5FC3-5836-F9C6-4D725A6F9291]
    // </editor-fold>
    /**
     * 0-4 kaarten die niet gespeeld zijn door de speler
     */
    private List<Kaart> nietGespeeldeKaarten = kaarten;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.42666D05-584F-0CE4-2DE6-5121FF913671]
    // </editor-fold> 
    /**
     * Constructor voor Hand, altijd moeten er vier ongespeelde kaarten 
     * meegegeven worden
     * @param kaarten               De kaarten die de hand vormen  
     * @throws java.lang.Exception  De error die optreedt als het er geen 4 zijn
     */
    public Hand (List<Kaart> kaarten) throws Exception {
        if (kaarten.size() != 4) {
            throw new Exception("Een nieuwe hand bestaat altijd uit 4 kaarten");
        }
        this.kaarten = kaarten;
        this.nietGespeeldeKaarten=kaarten;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.932D34FB-5E6B-47CD-68AC-AD18EBB72D9A]
    // </editor-fold>
    /**
     * @return Alle kaarten die gespeeld zijn
     */
    public List<Kaart> getGespeeldeKaarten () {
        return gespeeldeKaarten;
    }

    
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.932D34FB-5E6B-47CD-68AC-AD18EBB72D9A]
    // </editor-fold>
    /**
     * @return Alle kaarten die nog niet gespeeld zijn
     */
    public List<Kaart> getNietGespeeldeKaarten () {
        return nietGespeeldeKaarten;
    }
    
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.4FDA6608-D3F7-0E89-A2FC-EFEF7F6B5648]
    // </editor-fold>
    /**
     * Bepaatl of er alleen maar kaarten in de hand zitten die een aas zijn of
     * lager
     * @return true als dat zo is
     */
    public boolean getIsKandidaatVuileWas () {
        for (int i = 0; i<4; i++){
            if (this.getSpeelkaart(i).getWaarde().ordinal()>Waarde.AAS.ordinal()){
                return false;
            }
        }

        return true;
    }

    /**
     * Retourneert of de vuile was reeds bekeken is
     * @return true als dat zo is
     */
    public boolean getIsBekekenVuileWas () {
        return isBekekenVuileWas;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.E2CF6E3D-56D5-EBF9-0103-A6287EAA2CA2]
    // </editor-fold>
    /**
     * @return alle kaarten
     */
    public List<Kaart> getKaarten () {
        return kaarten;
    }

    /**
     * @param kaartnummer wat bekeken moet worden
     * @return kaart met dat nummer
     */
    public Kaart getSpeelkaart (int kaartnummer) {
        return this.kaarten.get(kaartnummer);
    }

    /**
     * Verplaats een kaart van de niet gespeelde kaarten naar de gespeelde
     * kaarten
     * @param kaart
     */
    public void setGespeeldeKaart(Kaart kaart) {
        this.gespeeldeKaarten.add(kaart);
        this.nietGespeeldeKaarten.remove(kaart);
    }
}

